# -*- coding: utf-8 -*-
# @Time    : 2022/10/11 22:52
# @Author  : 修远
# @File    : TokenUtils.py
# @Comment :
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from app.utils.enums import Status
from flask import current_app


# 生成token：生成方式（ 内部配置的私钥+有效期+用户的id +用户名+用户邮箱）
def create_token(id, user_name, email, password):
    '''
    生成token
    :return: token
    '''
    # 第一个参数是内部的私钥，这里写在共用的配置信息里了，如果只是测试可以写死
    # 第二个参数是有效期(秒)
    s = Serializer(current_app.config["SECRET_KEY"], expires_in=current_app.config["EXPIRES_IN"])

    # 接收用户id转换与编码
    token = None
    try:
        token = "Basic " + s.dumps({"id": id, "name": user_name, "email": email, "password": password}).decode("ascii")
    except Exception as e:
        # app.logger.error("获取token失败:{}".format(e))
        pass

    return token


# 校验token：校验接收到的token，如果成功返回用户信息，否则返回None
def verify_token(token):
    '''
    校验token
    :param token:
    :return: 用户信息 or None
    '''
    # 参数为私有秘钥，跟上面方法的秘钥保持一致
    s = Serializer(current_app.config["SECRET_KEY"])
    token = token.split(" ")[1]
    # 转换为字典
    if data := s.loads(token):
        return data
    else:
        return Status.TOKEN_OVERDUE.value
